package com.jlboot.app.admin.base;

import com.jlboot.core.ConfigUtil;
import com.jlboot.core.base.BaseSearchDto;
import com.jlboot.core.json.JsonResult;
import com.jlboot.core.json.JsonUtil;
import com.jlboot.core.model.DataMap;
import com.jlboot.core.util.HtmlUtil;
import com.jlboot.core.form.FormData;

import com.jfinal.core.Controller;
import com.jfinal.plugin.activerecord.Model;

import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * Created by 51594 on 2022/7/27.
 */
public abstract class BaseController extends Controller {

    /**
     *
     */
    public static final String MSG_ADD = "添加";
    /**
     *
     */
    public static final String MSG_EDIT = "修改";
    /**
     *
     *
     */
    public static final String MSG_DEL = "删除";

    /**
     *
     */
    public static boolean DEBUG = ConfigUtil.DEBUG();


//    public BaseSearchDto getSearchDto(){
//
//        HttpServletRequest request=getRequest();
//
//        BaseSearchDto searchDto=new BaseSearchDto();
//
//        Map<String,String[]> paramMap=getParaMap();
//        Map<String,Object> search=new HashMap<>();
//
//        Integer page=getParaToInt("page");
//        if(page==null){
//            page=1;
//        }
//
//        Integer limit=getParaToInt("limit");
//        if(limit==null){
//            limit=10;
//        }
//        if(limit>1000){
//            limit=1000;//防止有人调用数据，每页最多100条数据
//        }
//
//
//        Set<String> keys=paramMap.keySet();
//        for (String key : keys) {
//            if(!"page".equals(key)&&!"limit".equals(key)){
//                String[] value=paramMap.get(key);
//                search.put(key,value);
//            }
//        }
//
//        searchDto.setPage(page);
//        searchDto.setLimit(limit);
//        searchDto.setSearch(search);
//        return searchDto;
//
//    }


    /**
     * @param model
     * @param keyid
     * @param colums
     * @param msg
     * @return
     */
    protected JsonResult DoBasePub(Model model, Object keyid, String colums, String msg) {
        Model bm = model.findById(keyid);
        if (bm != null) {
            if (bm.getInt(colums) == null) {
                return JsonResult.fail("字段" + colums + "不存在");
            } else if (bm.getInt(colums) == 0) {
                if (bm.set(colums, 1).update()) {

                    return JsonResult.ok().setMsg(msg + "成功");

                } else {
                    return JsonResult.fail(msg + "失败");
                }
            } else {
                if (bm.set(colums, 0).update()) {
                    return JsonResult.ok( ).setMsg("取消成功");
                } else {
                    return JsonResult.fail( "取消失败");
                }
            }
        } else {
            return JsonResult.fail( "信息不存在");
        }
    }

    /**
     * @param model
     * @param keyid
     * @param msg
     * @return
     */
    protected JsonResult VerifyKey(Model model, Object keyid, String msg) {
        Model bm = model.findById(keyid);
        if (bm == null) {
            return JsonResult.okWithMsg(msg + "不存在");
        } else {
            return JsonResult.fail( msg + "已存在,不能重复");
        }
    }


//    /**
//     * @param model
//     * @param keyid
//     * @param colums
//     * @param msg
//     * @return
//     */
//    protected JsonResult DoBasePub(Model model, Object keyid, Object keyid2, String colums, String msg) {
//        Model bm = model.findByIds(keyid, keyid2);
//        if (bm != null) {
//            if (bm.getInt(colums) == 0) {
//                if (bm.set(colums, 1).update()) {
//                    return JsonResult.okWithMsg(msg + "成功");
//                } else {
//                    return JsonResult.fail( msg + "失败");
//                }
//            } else {
//                if (bm.set(colums, 0).update()) {
//                    return JsonResult.okWithMsg("取消成功");
//                } else {
//                    return JsonResult.fail( "取消失败");
//                }
//            }
//        } else {
//            return JsonResult.fail( "信息不存在");
//        }
//    }


    /**
     * @param model
     * @param field
     * @param value
     * @param key_id
     * @return
     */
    protected JsonResult ModifyFieldApi(Model model, String field, String value, Object... key_id) {
        Model o = model.findByIds(key_id);
        if (o != null) {
            boolean result = o.set(field, value).update();
            if (result) {
                return JsonResult.okWithMsg("修改成功");
            } else {
                return JsonResult.fail( "修改失败");
            }
        } else {
            return JsonResult.fail( "信息不存在");
        }
    }

//    /**
//     * @param model
//     * @param keyid
//     * @param colums
//     * @param msg
//     * @return
//     */
//    protected JsonResult DoBasePubs(Model model, String colums, String msg, Object... keyid) {
//        Model bm = model.findByIds(keyid);
//        if (bm != null) {
//            if (bm.getInt(colums) == 0) {
//                if (bm.set(colums, 1).update()) {
//                    return JsonResult.okWithMsg(msg + "成功");
//                } else {
//                    return JsonResult.fail( msg + "失败");
//                }
//            } else {
//                if (bm.set(colums, 0).update()) {
//                    return JsonResult.okWithMsg("取消成功");
//                } else {
//                    return JsonResult.fail( "取消失败");
//                }
//            }
//        } else {
//            return JsonResult.fail( "信息不存在");
//        }
//    }

    /**
     * JSON 转map
     *
     * @param json
     * @return
     */
    protected DataMap getDatas(String json) {
        return JsonUtil.json2Datas(json);
    }


    /**
     * JSON 转map
     *
     * @return
     */
    protected DataMap getDatas() {
        DataMap d = JsonUtil.json2Datas(getPara("postData"));
        String req = getRawData();
        if (d == null || d.isEmpty()) {
            d = JsonUtil.json2Datas(req);
        }
//        if (d == null || d.isEmpty()) {
//            d = JsonUtil.json2Datas(getPara("postData"));
//        }
        if (d == null) d = DataMap.n();
        return d;
    }

    /**
     * 从map中取值
     * 产生异堂时抛出巩异常
     *
     * @param m
     * @param para
     * @return
     */
    protected int getInt(Map m, String para) {
        return Integer.parseInt(String.valueOf(m.get(para)));
    }

    /**
     * 从map中取值
     * 产生异堂时抛出巩异常
     *
     * @param m
     * @param para
     * @return
     */
    protected double getDouble(Map m, String para) {
        return Double.parseDouble(String.valueOf(m.get(para)));
    }


    /**
     * 从map中取值
     * 产生异堂时抛出巩异常
     *
     * @param m
     * @param def
     * @return
     */
    protected double getDouble(Double m, double def) {
        return m == null ? def : (m.doubleValue());
    }

    /**
     * 从map中取值
     * 产生异堂时抛出巩异常
     *
     * @param m
     * @param para
     * @return
     */
    protected double getDouble(Map m, String para, double defvalue) {
        try {
            return getDouble(m, para);
        } catch (Exception e) {
            return defvalue;
        }
    }

    /**
     * 从map中取值
     * 产生异堂时反回默认值
     *
     * @param m
     * @param para
     * @return
     */
    protected int getInt(Map m, String para, int defvalue) {
        try {
            return getInt(m, para);
        } catch (Exception e) {
            return defvalue;
        }
    }

    /**
     * 从map中取值
     * 产生异堂时抛出巩异常
     *
     * @param m
     * @param para
     * @return
     */
    protected String getStr(Map m, String para) {
        String values = String.valueOf(m.get(para));
        if (values == null) return null;
        values = HtmlUtil.toHtmlInput(values);
        //values = Jsoup.clean(values, Whitelist.basicWithImages());
        return values;
    }

    /**
     * 从map中取值
     * 产生异堂时反回默认值
     *
     * @param m
     * @param para
     * @return
     */
    protected String getStr(Map m, String para, String defvalue) {
        try {
            String values = getStr(m, para);
            if (values == null) values = defvalue;
            return values;
        } catch (Exception e) {
            return defvalue;
        }
    }

    /**
     * 从map中取值
     * 产生异堂时抛出巩异常
     *
     * @param m
     * @param para
     * @return
     */
    protected String getStr(Model m, String para) {
        return getStr(m, para, null);
    }

    /**
     * 从map中取值
     * 产生异堂时反回默认值
     *
     * @param m
     * @param para
     * @return
     */
    protected String getStr(Model m, String para, String defvalue) {
        try {

            return m.getStr(para) == null ? defvalue : m.getStr(para);
        } catch (Exception e) {
            return defvalue;
        }
    }


    /**
     * 字符转数字
     * 产生异堂时反回默认值
     *
     * @param para
     * @return
     */
    protected int getInt(String para, int defvalue) {
        try {
            return getInt(para);
        } catch (Exception e) {
            return defvalue;
        }
    }

    /**
     * 字符转数字
     * 产生异堂时反回默认值
     *
     * @param str
     * @return
     */
    protected String getStr(String str, String defvalue) {
        return str == null ? defvalue : str;
    }

    /**
     * 字符转数字
     * 产生异堂时反回默认值
     *
     * @param para
     * @return
     */
    protected int getParaInt(String para, int defvalue) {
        try {
            Integer v = getParaToInt(para);
            return v == null ? defvalue : v.intValue();
        } catch (Exception e) {
            return defvalue;
        }
    }

    /**
     * 字符转数字
     * 产生异堂时反回默认值
     *
     * @param para
     * @return
     */
    protected long getParaLong(String para, long defvalue) {
        try {
            Long v = getParaToLong(para);
            return v == null ? defvalue : v.longValue();
        } catch (Exception e) {
            return defvalue;
        }
    }

    /**
     * 用request中取值
     * 产生异堂时反回默认值
     *
     * @param para
     * @return
     */
    protected String getParaStr(String para, String defvalue) {
        String values = getPara(para);
        if (values == null) return defvalue;
        //values = HtmlUtil.decode(values);
        //values = Jsoup.clean(values, Whitelist.basicWithImages());
        return getStr(values, defvalue);
    }


    /**
     * 用request中取值
     * 产生异堂时反回默认值
     *
     * @param para
     * @return
     */
    protected double getParaDouble(String para, double defvalue) {
        try {
            Double v = Double.parseDouble(getParaStr(para, ""));
            return v == null ? defvalue : v.doubleValue();
        } catch (Exception e) {
            return defvalue;
        }
    }

    /**
     * 用request中取值
     * 产生异堂时反回默认值
     *
     * @param para
     * @return
     */
    protected DataMap getParaData(String para, String defvalue) {
        String values = getPara(para);
        if (values == null) values = defvalue;
        return JsonUtil.json2Datas(getStr(values, defvalue));
    }

    /**
     * 用request中取值
     * 产生异堂时反回默认值
     *
     * @return
     */
    protected DataMap getRawData(String defvalue) {
        String values = getRawData();
        if (values == null) values = defvalue;
        return JsonUtil.json2Datas(getStr(values, defvalue));
    }

    /**
     * 用request中取值
     * 产生异堂时反回默认值
     *
     * @param para
     * @return
     */
    protected Date getParaDate(String para, Date defvalue) {
        try {
            return getParaToDate(para);
        } catch (Exception e) {
            return defvalue;
        }
    }

    /**
     * 用request中取值
     * 产生异堂时反回默认值
     *
     * @param para
     * @return
     */
    protected Date getParaDate(String para) {
        return getParaDate(para, null);
    }

    /**
     * @param fd
     */
    protected void setForm(FormData fd) {
        if (fd == null) fd = FormData.n();
        setAttr("form", fd);
    }


    /**
     * \
     *
     * @param o
     * @return
     */
    protected String toJsonStr(Object o) {
        return JsonUtil.toJsonString(o);
    }

    /**
     * @param result
     * @param msg
     * @return
     */
    protected JsonResult Json(boolean result, String msg) {
        if (result) {
            return JsonResult.okWithMsg(msg + "成功");
        } else {
            return JsonResult.fail( msg + "失败");
        }//
    }


//    /**
//     * 批量删除
//     */
//    public JsonResult DelMoreModel(Model model, String keys, String msg) {
//        ///////////////////////////////////
//        int succ = 0, error = 0;
//        String[] ids = StringUtil.split(keys, ",");
//        for (String id : ids) {
//            if (model.deleteById(id)) {
//                succ++;
//            } else {
//                error++;
//            }
//        }
//        return JsonResult.okWithMsg(msg + "【共删除成功 " + succ + ",失败 " + error + "】");
//    }


    /**
     * @return
     */
    protected int getPage() {
        return getParaToInt("page", 1);
    }

    /**
     * @return
     */
    protected int getLimit() {
        return getParaToInt("limit", 10);
    }

    /**
     * @param limits
     * @return
     */
    protected int getLimit(int limits) {
        return getParaToInt("limit", limits);
    }







}